Skip to content

feat(schemas): Model Plane store manifests (T7-2, resolves #242) - #245

Merged
mdheller merged 2 commits into
mainfrom
feat/t7-model-manifests
Aug 2, 2026
Merged

feat(schemas): Model Plane store manifests (T7-2, resolves #242)#245
mdheller merged 2 commits into
mainfrom
feat/t7-model-manifests

Conversation

@mdheller

@mdheller mdheller commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Resolves #242 (part of #241). Adds the two content-addressed store manifests the Model Plane spec §IV places beside the weights.

Added

  • schemas/ModelManifest.json — base-model store manifest (modelDigest key, architecture, quantization, format, tokenizer digest, context length, default tier, modalities, license, signature).
  • schemas/ModelAdapterManifest.json — LoRA adapter manifest (adapterDigest, baseModelDigest, task, rank, alpha, target modules, eval-report digest, license, signature).
  • Examples, README rows, CHANGELOG, docs/adr/0016-model-plane-store-manifests.md.

Decisions (from #242)

  • Named ModelAdapterManifest, not AdapterManifest — avoids collision with AdapterDescriptor (connector/actuation adapters).
  • Complement, not replace, SourceOSModelCarryRef — the carry-ref is a governance/policy reference that points AT a manifest digest (modelRef); the manifest is the content-addressed store truth and back-links via carryRefs.

Teeth (verified both ways)

  • ModelManifest invalid without a signature (SEAM-014).
  • ModelAdapterManifest invalid without baseModelDigest (SEAM-017) or signature.
  • Both require an SPDX license → MIT/Apache-only rule checkable before wiring; non-SPDX uses LicenseRef-<name> (visibly not Apache/MIT). Closes spec OQ3 at the contract layer.

Validation

  • Compile + examples pass; 4/4 negative teeth tests pass; duplicate-$id clean.

⚠️ Do not auto-merge — awaiting Copilot review.

…erManifest (T7-2)

Resolves #242. Content-addressed store manifests complementing (not duplicating)
SourceOSModelCarryRef. ModelAdapterManifest named to avoid AdapterDescriptor
collision. Teeth verified both ways: ModelManifest invalid w/o signature
(SEAM-014); ModelAdapterManifest invalid w/o baseModelDigest (SEAM-017) or
signature; both require SPDX license (MIT/Apache-only checkable, closes OQ3).
See ADR-0016.
Copilot AI review requested due to automatic review settings August 2, 2026 18:29

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds two new JSON Schemas and canonical examples for content-addressed Model Plane store manifests (base model + LoRA adapter), documenting the design decision in ADR-0016 and registering the new types in the schemas README and CHANGELOG. This fits the repo’s role as the normative contract layer by defining the store-level “what the weights are” manifests as distinct from governance/policy references like SourceOSModelCarryRef.

Changes:

  • Add ModelManifest and ModelAdapterManifest schemas (required signature + license, adapter binds to a base-model digest).
  • Add canonical examples for both manifests.
  • Document the decision in ADR-0016 and list the new types in schemas/README.md + CHANGELOG.md.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
schemas/README.md Registers the two new schema types and updates the “canonical examples / ADRs” pointers.
schemas/ModelManifest.json Introduces the base-model store manifest schema.
schemas/ModelAdapterManifest.json Introduces the LoRA adapter store manifest schema (base-model binding, adapter metadata).
examples/model-manifest.json Canonical example for ModelManifest.
examples/model-adapter-manifest.json Canonical example for ModelAdapterManifest.
docs/adr/0016-model-plane-store-manifests.md Records the design decision and reconciliation with existing types.
CHANGELOG.md Notes the addition of the new manifest contracts + examples + ADR.

Comment thread schemas/ModelAdapterManifest.json
Comment thread schemas/ModelManifest.json Outdated
"tokenizerDigest": { "type": ["string", "null"], "pattern": "^sha256:[a-fA-F0-9]{64}$", "description": "Content-addressed digest of the tokenizer, or null when the tokenizer is embedded in the weights." },
"contextLength": { "type": ["integer", "null"], "minimum": 0, "description": "Maximum context length in tokens, or null when unknown." },
"defaultTier": { "type": ["string", "null"], "enum": ["T0", "T1", "T2", "T3", "T4", null], "description": "The Model Plane tier this model is normally resident at." },
"modalities": { "type": "array", "description": "Modalities the model serves.", "items": { "type": "string", "enum": ["text", "code", "embedding", "reranking", "vision", "audio", "video", "multimodal"] } },

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b5da77ftargetModules now required with minItems:1+uniqueItems:true; modalities minItems:1+uniqueItems:true when present. Negative tests (empty/missing/duplicate) all reject. Thanks.

Comment thread schemas/ModelAdapterManifest.json Outdated
"task": { "type": "string", "description": "Task the adapter specializes, e.g. summarization, translation-de-en, agent_classification." },
"rank": { "type": "integer", "minimum": 1, "description": "LoRA rank (r)." },
"alpha": { "type": "number", "exclusiveMinimum": 0, "description": "LoRA scaling factor (alpha)." },
"targetModules": { "type": "array", "description": "Attention/MLP submodules the adapter targets, e.g. q_proj, v_proj, o_proj, gate_proj.", "items": { "type": "string" } },

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b5da77ftargetModules now required with minItems:1+uniqueItems:true; modalities minItems:1+uniqueItems:true when present. Negative tests (empty/missing/duplicate) all reject. Thanks.

- ModelAdapterManifest.targetModules now required + minItems:1 + uniqueItems
  (a LoRA adapter that doesn't declare target modules is not applicable)
- ModelManifest.modalities minItems:1 + uniqueItems when present
Negative tests added for empty/missing/duplicate cases.
@mdheller
mdheller merged commit fe24cf7 into main Aug 2, 2026
7 checks passed
@mdheller
mdheller deleted the feat/t7-model-manifests branch August 2, 2026 18:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T7-2 DECISION: ModelManifest / AdapterManifest vs SourceOSModelCarryRef

2 participants